/**
 * Description:
 * Class Name:FileTest
 * Date:2022/5/4 15:35
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第15章_输入输出._15_10_NIO2的功能和用法._15_10_1_Path_Paths和Files核心API;

import java.io.File;
import java.io.FileOutputStream;
import java.nio.charset.Charset;
import java.nio.file.FileStore;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class FileTest {
    public static void main(String[] args) throws Exception{
        String path = "./src/" + FileTest.class.getName().replace(".", "/") + ".java";
        // 复制文件
        Files.copy(Paths.get(path), new FileOutputStream("Chapter_15_10_FileTest.txt"));
        // 判断 FilesTest.java 文件是否为隐藏文件
        System.out.println(FileTest.class.getName() + " 文件是否为隐藏文件？--->" + Files.isHidden(Paths.get(path)));
        // 一次性读取FilesTest.java文件的所有行
        List<String> lines = Files.readAllLines(Paths.get(path));
        // 判断指定文件的大小
        System.out.println(FileTest.class.getName() + " 的大小为：" + Files.size(Paths.get(path)));

        List<String> poem = new ArrayList<>();
        poem.add("水晶潭底银鱼跃");
        poem.add("清徐风中碧竿横");
        // 直接将多个字符串内容写入指定文件中
        Files.write(Paths.get("Chapter_15_10_1_poem.txt"), poem);

        // 使用Java 8新增的Stream API列出当前目录下所有文件和子目录
        Files.list(Paths.get(".")).forEach(System.out::println);
        // 使用Java 8新增的Stream API读取文件内容
        Files.lines(Paths.get(path)).forEach(System.out::println);

        // 获取C盘的情况
        FileStore cStore = Files.getFileStore(Paths.get("C:"));
        System.out.println("C盘共有空间：" + cStore.getTotalSpace());
        System.out.println("C盘可用空间：" + cStore.getUsableSpace());
    }
}
